#ifndef PROCESSOR
#define PROCESSOR

#include "os.h"
#include "string.h"
#include "../math/array.h"

namespace sleek
{
    namespace core
    {
        namespace os
        {
            enum PROCESSOR_CPU_ARCH   { PCA_X86, PCA_X86_64, PCA_COUNT };
            enum PROCESSOR_CPU_INTRUCTION { PCI_INTEL, PCI_AMD, PCI_COUNT };

            enum PROCESSOR_UNITY_TYPE { PUT_CPU, PUT_GPU, PUT_PPU, PUT_COUNT };
            enum PROCESSOR_CACHE_TYPE { PCT_L1, PCT_L2, PCT_L3, PCT_L4, PCT_COUNT };

            struct processor
            {
                stringc Manufacturer;
                stringc ProcessorName;

                s8 CoresPerPackage, LogicalPerPackage;
                s8 Family, Model, Stepping;
                s8 BrandID, APICID;
                s32 Clock, MHtz;

                math::array<const s8*> features;
                math::array<s8*> caches;
            };
        }
    }
}

#endif
